#ifndef _Torino2009_H_
#define _Torino2009_H_

//
// Torino2009.h
//
// Created by TB on 11/23/11.
// Copyright 2011 BNL. All rights reserved.
//

#include "tppmc/Grv98Pdf.h"
#include "tppmc/PartonContent.h"
#include "tppmc/PartonDistribution.h"

namespace tppmc {
   
   namespace sivers {
      
      /**
       2009 parameterisation of the Sivers distribution by Anselmino et al.
       See arXiv:0805.2677v2.
       The GRV98 LO PDF set was used in the extraction.
       \todo SiversTorino2009 would probably be a more appropriate name.
       */
      class Torino2009 : public PartonDistribution {
         
      public:
         
         /**
          Constructor.
          If the argument is false, returns the Sivers distribution according to
          the fit.
          If the argument is true, returns the positivity bound.
          */
         Torino2009(bool);
         
         /**
          Destructor.
          */
         virtual ~Torino2009();
         
         /**
          Returns the Sivers distributions for all parton flavours at
          a given scale.
          The x and kT at which to evaluate the distribution are defined
          by the input parton.
          Values are given for up, down and strange (anti)quarks.
          All other values are set to zero.
          */
         virtual void Evaluate(const pythpart&, double scale,
                               PartonContent&) const;

         /**
          Returns true if the distribution of the input parton type
          is supported by this function.
          */
         virtual bool Supports(const pythpart&) const;
         
         virtual std::string Name() const;
         
      protected:
         
         bool mUseBound; ///< Use positivity bound i.e. <= unpolarised
         
         Grv98Pdf mUnpolarised; ///< The unpolarised PDF set
         
         SETS mParameters; ///< Make use of existing parameter-reading
                           ///< functionality. Would be worthwhile
                           ///< improving this later...
         
         ClassDef(tppmc::sivers::Torino2009, 1)
      };
   } // namespace sivers
} // namespace tppmc

#endif
